<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
 * 商品分类处理
 *
 * @author <judasnow@gmail.com>
 */
class product_class{
	private $_CI;
	private $_property;

	public function __construct( $property = '' ){
		$this->_CI =& get_instance();
		$this->_property = $property;
		$this->_CI->load->model( 'product_class_model' , '' , TRUE );
	}

	//删除目录结构 注意必须要提供绝对路径
	public function del_dir( $dir ){ 
		if( strtoupper( substr( PHP_OS , 0 , 3 ) ) == 'WIN' ){ 
			 $cmd = "rd /S /Q " . '"' . $dir . '"'; 
		}else{ 
			 $cmd = "rm -Rf" . '"' . $dir . '"'; 
		} 
		system( $cmd );
	}
	
	/**
	 * 通过提供的新分类信息生成相应的文件夹结构数组
	 */
	private function create_dir_construct( $new_class_info ){
		return array( $new_class_info['product_class_name']=>array( 
			 'detail_category_list' , 'feature' , 'multimedia_describe' , 'text_describe' 	
		));
	}

	private function mkdir_dir_and_chmod( $dir ){
	        if( !( mkdir( APPPATH . 'views/mod/base_index_product_class_infos/' . $dir ) ) ){
			throw new Exception( '创建服务主文件夹及修改其权限时异常' );			
		}
		return TRUE;
	}

	/**
	 * 创建文件夹结构
	 *
	 * @prarm array $dir_construct 需要创建的子文件夹结构 暂时只支持两层结构
	 *			 array( 'sub_dir_name'=>array(
	 *				 'dir1' , 'dir2' , 'dir3' 
	 *			 ))
	 */
	private function create_product_class_dir( $dir_construct , $new_class_info ){
		$this->_CI->load->helper('file');
		foreach( $dir_construct as $main_dir_name=>$sub_dir ){
			//创建主文件夹
			$this->mkdir_dir_and_chmod( $main_dir_name );
			//创建子文件夹
			foreach( $sub_dir as $no=>$dir_name ){
				$this->mkdir_dir_and_chmod( $main_dir_name . '/' . $dir_name );
				//为每一个子文件夹创建一个默认页面 pager_1 
				if( !write_file( APPPATH . "views/mod/base_index_product_class_infos/$main_dir_name/$dir_name/pager_1.php" , '默认页面' ) ){
					 throw new Exception( "创建子文件夹中的默认文件时异常" );
				}
			}
		}
		//创建 base_index_detail_product_item 文件夹
		$this->mkdir_dir_and_chmod( "$main_dir_name/base_index_detail_product_item" );
		//创建首页 detail 模块相应的模板文件
		$fp = fopen( APPPATH . "views/mod/base_index_product_class_infos/$main_dir_name/base_index_detail_product_item/base_index_detail_product_item.php" , 'w+' );
		//写入默认的商品列表模板文件
		//渲染模板文件
		$base_index_detail_product_item_content = $this->_CI->load->view( 'mod/base_index_detail_product_item_temp' , array( 'new_class_info'=>$new_class_info ), TRUE );
		//写入文件内容
		write_file( APPPATH . "views/mod/base_index_product_class_infos/$main_dir_name/base_index_detail_product_item/base_index_detail_product_item.php" ,
			$base_index_detail_product_item_content );
		if( !$fp ){
			//创建失败
			throw new Exception( "创建文件( $main_dir_name/base_index_detail_product_item.php )时错误" );
		}
		//关闭文件
		fclose( $fp );
	}

	/**
	 * 增加一个新的分类到系统中
	 *
	 * @param array $new_class_info 新类型的信息
	 * @param string $new_class_descript 新类型的描述信息 不写入数据库
	 */
	public function add_new( $new_class_info , $new_class_describe ){
		//以下应该为一个原子操作
		//如果已经存在相同名字的服务则什么也不做 
		if( $this->is_exists( $new_class_info ) ){
			 throw new RuntimeException( "系统中已经存在相同名称的服务,请联系管理员(检查数据库中是否有同名记录以及mod文件夹中是否有同名文件夹)" );
		}
		//创建相应的文件夹
		$new_class_info['new_class_describe'] = $new_class_describe;
		$this->create_product_class_dir( $this->create_dir_construct( $new_class_info ) , $new_class_info );
		//插入一条新的记录分类到数据库中
		$this->_CI->product_class_model->add_new( $new_class_info );
	}

	/**
	 * 判断是否存在相应的记录
	 *
	 * @param array $cond 查找条件
	 * @return bool 同时存在才返回 false
	 */
	public function is_exists( $cond ){
		//数据库中是否存在
		$db_item_exist = $this->_CI->product_class_model->is_exists( $cond );
		//相应的文件夹是否存在
		$dir_exist = is_dir( APPPATH . 'views/mod/base_index_product_class_infos/' . $cond['product_class_name'] );
		return ( $db_item_exist || $dir_exist );
	}

	/**
	 * 删除 $cond 指定的记录
	 *
	 * @param array $cond 查找条件
	 * @return bool 删除成功返回 TRUE 
	 */
	public function del( $cond ){
		 //删除数据库中的相应记录
		 $this->_CI->product_class_model->del( $cond );
		 $this->del_dir( getcwd() . '/' . APPPATH . 'views/mod/base_index_product_class_infos/' . $cond['product_class_name'] );
	}
}
